home *** CD-ROM | disk | FTP | other *** search
- # Jedi Knight Missions Cog Script
- #
- # WEAP_SABER_M.COG
- #
- # WEAPON Script - Lightsaber
- #
- # [CYW] + [RF] + [YB]
- #
- # (C) 1997 LucasArts Entertainment Co. All Rights Reserved
- # ========================================================================================
-
-
- symbols
-
- message startup
- message activated
- message deactivated
- message selected
- message deselected
- message user0
- message newplayer
- message autoselect
- message timer
- message fire
- message killed
- message joined
-
- # ........................................................................................
-
- model povModel=sabv.3do local
- model povModel_m=sabv_m.3do local
- model saberMesh=sabg.3do local
-
- # ........................................................................................
- # POV animations
-
- keyframe mountAnim=SabVmnt.key local
- keyframe dismountAnim=SabVdis.key local
- keyframe holdAnim=SabVhold.key local
-
- keyframe povSnapAnim1=SabVf1.key local
- keyframe povSnapAnim2=SabVf2.key local
- keyframe povSnapAnim3=SabVf1.key local
-
- keyframe povPreFireAnim=SabVrdy.key local
- keyframe povFireAnimF1=SabVsnp1.key local
- keyframe povFireAnimF2=SabVsnp2.key local
- keyframe povFireAnimB1=SabVb1.key local
- keyframe povFireAnimB2=SabVb2.key local
- keyframe povFireAnimL1=SabVl1.key local
- keyframe povFireAnimR1=SabVr1.key local
- keyframe povChargeAnim=SabVch.key local
-
- keyframe povPreBlockAnim=SabVblk.key local
-
- # ........................................................................................
- # External animations
-
- keyframe preFireAnimL=KYreadyl.key local
- keyframe preFireAnimR=KYreadyr.key local
- keyframe fireAnimF1=KYsnap1.key local
- keyframe fireAnimF2=KYsnap2.key local
- keyframe fireAnimB1=KYsabrb1.key local
- keyframe fireAnimB2=KYsabrb2.key local
- keyframe fireAnimL1=KYsabrl1.key local
- keyframe fireAnimR1=KYsabrr1.key local
-
- keyframe snapAnim1=KYsabrf1.key local
- keyframe snapAnim2=KYsabrf2.key local
- keyframe snapAnim3=KYsabrf1.key local
- keyframe chargeAnim=KYcharge.key local
-
- keyframe preBlockAnim=KYblock.key local
- keyframe holsterAnim=kyhlstr.key local
-
- # ........................................................................................
-
- sound dismountSound=LtSaberOff01.WAV local
- sound mountSound=LtSaberOn01.WAV local
- sound hitSound01=LtSaberHit01.WAV local
- sound hitSound02=LtSaberHit02.WAV local
- sound hitSound03=LtSaberHit03.WAV local
- sound hitSound12=LtSaberHit12.WAV local
- sound hitSound14=LtSaberHit14.WAV local
- sound swingSound01=LtSaberSwing01.WAV local
- sound swingSound02=LtSaberSwing02.WAV local
- sound swingSound03=LtSaberSwing03.WAV local
- sound swingSound04=LtSaberSwing04.WAV local
- sound swingSound05=LtSaberSwing05.WAV local
- sound swingSound06=LtSaberSwing06.WAV local
- sound swingSound07=LtSaberSwing07.WAV local
- sound swingSound08=LtSaberSwing08.WAV local
- sound swingSoundDbl01=LtSaberSwingDbl01.WAV local
- sound humSound01=LtSaberLp01.WAV local
-
- flex damage local
- flex bladeLen local
- flex holsterWait local
-
- thing player local
- thing antagonist local
-
- vector ppos local
- vector apos local
- vector diff local
- vector thrust local
-
- flex damage local
- flex type local
- flex dot local
-
- int iAlignmentPriority=-1 local
-
- # ........................................................................................
- # Animation tracks
-
- int mountAnimID=-1 local
- int preAnimID=-1 local
- int povPreAnimID=-1 local
- int slashAnimID=-1 local
- int povSlashAnimID=-1 local
-
- # ........................................................................................
-
- int mode local
- int slash local
- int nextAttack local # 0=right 1=left
- int humChannel=-1 local
- int holsterTrack=-1 local
- int slashSound=-1 local
-
- int assign local
- int nosaber=1 local
-
- vector shakePos local
- vector shakeAngle local
-
- cog kyleCog local
-
- end
-
- # ========================================================================================
-
- code
-
- startup:
- // Set up player with saber.
- player = GetLocalPlayerThing();
-
- kyleCog = GetThingClassCog(player);
-
- ClearActorFlags(player, 0x2000);
- jkDisableSaber(player);
- slash = 0;
- nextAttack = 0;
- slashAnimID=-1;
- povSlashAnimID=-1;
- return;
-
- # ........................................................................................
-
- timer:
- id = GetSenderId();
-
- if (id == 0)
- {
- // Only play the hum sound if we still have the saber up.
- if ((GetCurWeapon( player ) == 11) && !nosaber)
- {
- // Play mounting sound.
- PlaySoundThing(mountSound, player, 1.0, -1, -1, 0x80);
-
- // Stop humming sound
- if(humChannel != -1)
- {
- StopSound( humChannel, 0.5 );
- humChannel = -1;
- }
-
- humChannel = PlaySoundThing(humSound01, player, 1.0, -1, -1, 0x81);
- jkSetFlags(player, 0x5);
- }
- }
- else
- if (id == 1)
- {
- // Make sure a loose timer doesn't come in and reset the block after we deselect the saber.
- if (nosaber == 0)
- SetActorFlags(player, 0x2000);
- }
- else
- if (id == 2)
- {
- StopKey(player, holsterTrack, 0.0);
- }
- if (id == 3)
- {
- SetInv(player, 89, 0);
- }
- if (id == 10)
- {
- if (GetCurWeapon( player ) == 11)
- jkSetFlags(player, 0x81);
- }
-
- return;
-
- # ........................................................................................
-
- selected:
- // Cannot throw the saber in those 1.25 seconds
- SetInv(player, 89, 1);
- SetTimerEx(1.25, 3, 0, 0);
-
- assign = GetSenderRef();
-
- // Go to external
- if ((jkGetSaberCam() == 1) && (GetCurrentCamera() == 0) && (GetPrimaryFocus(0) == player))
- CycleCamera();
-
- // Setup the meshes and models.
- if (GetInv(player, 67) == 0.0)
- jkSetPOVModel(player, povModel); // Kyle hand
- else
- jkSetPOVModel(player, povModel_m); // Mara Hand
- SetArmedMode( player, 2 );
- jkSetWeaponMesh( player, saberMesh );
- jkSetWaggle(player, '10.0 7.0 0.0', 350);
-
- if (assign == 0)
- {
- // Play the animation (NOLOOP + UNIQUE + ENDPAUSE).
- // The animation is held at the last frame after it is played.
- PlayMode(player, 42);
- mountAnimID = jkPlayPOVKey( player, mountAnim, 0, 0x14 );
- SetTimerEx(0.7, 0, 0, 0);
- }
- else
- {
- mountAnimID = jkPlayPOVKey( player, holdAnim, 0, 0x14 );
-
- // Stop humming sound
- if(humChannel != -1)
- {
- StopSound( humChannel, 0.5 );
- humChannel = -1;
- }
-
- humChannel = PlaySoundThing(humSound01, player, 1.0, -1, -1, 0x81);
- jkSetFlags(player, 0x80);
- }
-
- SetMountWait(player, GetKeyLen(mountAnim));
-
- // Set saber flags, and allow activation of the weapon
- SetCurWeapon( player, GetWeaponBin(11) );
-
- if (iAlignmentPriority != -1)
- {
- aiRemoveAlignmentPriority(iAlignmentPriority);
-
- iAlignmentPriority = -1;
- }
-
- iAlignmentPriority = aiAddAlignmentPriority(1.0, 2);
-
- // Set autoblock on.
- SetActorFlags(player, 0x2000);
- jkDisableSaber(player);
- nosaber = 0;
- return;
-
- # ........................................................................................
-
- deselected:
- // Back to POV
- if ((jkGetSaberCam() == 1) && (GetCurrentCamera() == 1) && (GetPrimaryFocus(1) == player))
- CycleCamera();
-
- // Shrink saber.
- jkSetFlags(player, 0x8);
-
- // Dismount the Lightsaber.
- PlaySoundThing(dismountSound, player, 1.0, -1, -1, 0x80);
- jkPlayPOVKey( player, dismountAnim, 0, 18 );
-
- holsterWait = GetKeyLen(holsterAnim);
- SetMountWait(player, holsterWait);
- holsterTrack = PlayKey(player, holsterAnim, 1, 0x4);
- SetTimerEx(holsterWait, 2, 0.0, 0.0);
-
- call user0;
-
- // DamageThing(player, 200.0, 16, player);
-
- return;
-
- # ........................................................................................
-
- // This part is called directly from Force Saber Throw to get
- // a fast dismount but clear all the saber stuff properly...
- user0:
- // if the mount anim is still playing stop it
- if (mountAnimID != -1)
- {
- jkStopPOVKey( player, mountAnimID, 0 );
- mountAnimID = -1;
- }
-
- KillTimerEx(0);
-
- jkSetWaggle(player, '0.0 0.0 0.0', 0);
-
- // Clear variables
- slash = 0;
- nextAttack = 0;
- slashAnimID = -1;
- povSlashAnimID = -1;
-
- // Stop humming sound
- if(humChannel != -1)
- {
- StopSound( humChannel, 0.5 );
- humChannel = -1;
- }
-
- if (iAlignmentPriority != -1)
- {
- aiRemoveAlignmentPriority(iAlignmentPriority);
-
- iAlignmentPriority = -1;
- }
-
- // Waylay any hum sound that hasn't started yet.
- KillTimerEx(0);
-
- // Disable autoblock
- KillTimerEx(1);
- ClearActorFlags(player, 0x2000);
- jkDisableSaber(player);
- nosaber = 1;
-
- Return;
-
- # ........................................................................................
-
- activated:
- mode = GetSenderRef();
-
- jkSetWaggle(player, '0.0 0.0 0.0', 0);
-
- if (mode > 1)
- return;
-
- povPreAnimID = -1;
- preAnimID = -1;
-
- ActivateWeapon( player, 0.5, mode );
-
- // Disable autoblock
- ClearActorFlags(player, 0x2000);
-
- return;
-
- # ........................................................................................
-
- deactivated:
- mode = GetSenderRef();
-
- jkSetWaggle(player, '10.0 7.0 0.0', 350);
- DeactivateWeapon( player, mode );
-
- // Enable autoblock
- SetTimerEx(0.5, 1, 0, 0);
-
- return;
-
- # ........................................................................................
-
- fire:
- // Stop block animations, by sending a message to kyle.cog.
- SendMessage( kyleCog, user0 );
-
- // Tell kyle.cog that the player has done something to attract attention.
- SendMessageEx(kyleCog, user1, 3.0, 0, 0, 0);
-
- // Underwater saber attacks.
- if (GetMajorMode(player) == 5)
- {
- jkEnableSaber( player, 50, 0.15, 0.25 );
-
- if (nextAttack == 0)
- {
- PlayMode( player, 8);
- jkPlayPOVKey( player, povFireAnimR1, 2, 0x38 );
- nextAttack = 1;
- }
- else
- {
- PlayMode( player, 18);
- jkPlayPOVKey( player, povFireAnimL1, 2, 0x38 );
- nextAttack = 0;
- }
-
- shakePos = VectorScale(RandVec(),.001);
- shakeAngle = VectorScale(RandVec(),.5);
- SetPOVShake(shakePos, shakeAngle, .05, 80.0);
-
- SetFireWait(player, 1.0);
-
- slashSound = Rand()*7;
- PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
- }
- else
- {
- mode = GetSenderRef();
- if (mode == 0)
- {
- // If we do another attack, reset the quick slash counter.
- thrust = GetThingThrust( player );
-
- // RIGHT Regular Strike
- if (VectorX(thrust) > 0)
- {
- jkEnableSaber( player, 50, 0.15, 0.25 );
-
- jkPlayPOVKey( player, povFireAnimR1, 2, 0x38 );
- PlayKey(player, fireAnimR1, 1, 0x38);
-
- shakePos = VectorScale(RandVec(),.001);
- shakeAngle = VectorScale(RandVec(),.5);
- SetPOVShake(shakePos, shakeAngle, .05, 80.0);
-
- // PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
- slashSound = Rand()*7;
- PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
- SetFireWait(player, 0.8);
- }
- else
- // LEFT Regular Strike
- if (VectorX(thrust) < 0)
- {
- jkEnableSaber( player, 50, 0.15, 0.25 );
-
- jkPlayPOVKey( player, povFireAnimL1, 2, 0x38 );
- PlayKey(player, fireAnimL1, 1, 0x38);
-
- shakePos = VectorScale(RandVec(),.001);
- shakeAngle = VectorScale(RandVec(),.5);
- SetPOVShake(shakePos, shakeAngle, .05, 80.0);
-
- // PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
- slashSound = Rand()*7;
- PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
- SetFireWait(player, 0.8);
- }
- else
- // BACKWARDS Strike
- if (VectorY(thrust) < -0.1)
- {
- jkEnableSaber( player, 50, 0.15, 0.25 );
-
- if (nextAttack == 0)
- {
- jkPlayPOVKey( player, povFireAnimB1, 2, 0x38 );
- PlayKey(player, fireAnimB1, 2, 0x38);
- nextAttack = 1;
- }
- else
- {
- jkPlayPOVKey( player, povFireAnimB2, 2, 0x38 );
- PlayKey(player, fireAnimB2, 2, 0x38);
- nextAttack = 0;
- }
- shakePos = VectorScale(RandVec(),.001);
- shakeAngle = VectorScale(RandVec(),.5);
- SetPOVShake(shakePos, shakeAngle, .05, 80.0);
-
- slashSound = Rand()*7;
- PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
- SetFireWait(player, 0.8);
- }
- else
- // STANDING Strike
- if (VectorY(thrust) < 0.1)
- {
- jkEnableSaber( player, 50, 0.25, 0.7 );
-
- if (nextAttack == 0)
- {
- jkPlayPOVKey( player, povFireAnimF1, 2, 0x38 );
- PlayKey(player, fireAnimF1, 2, 0x38);
- nextAttack = 1;
- }
- else
- {
- jkPlayPOVKey( player, povFireAnimF2, 2, 0x38 );
- PlayKey(player, fireAnimF2, 2, 0x38);
- nextAttack = 0;
- }
-
- shakePos = VectorScale(RandVec(),.001);
- shakeAngle = VectorScale(RandVec(),.5);
- SetPOVShake(shakePos, shakeAngle, .05, 80.0);
-
- // PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
- slashSound = Rand()*7;
- PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
- SetFireWait(player, 0.8);
- }
- else
- {
- // QUICK slash.
- if (slash == 0)
- {
- // If after a second, we haven't attacked again, reset slash to 0.
- jkEnableSaber( player, 40, 0.15, 0.25 );
-
- povSlashAnimID = jkPlayPOVKey( player, povSnapAnim1, 2, 0x38);
- slashAnimID = PlayKey(player, snapAnim1, 1, 0x38);
- PlaySoundThing(swingSound01, player, 1.0, -1, -1, 0x80);
-
- shakePos = VectorScale(RandVec(),.001);
- shakeAngle = VectorScale(RandVec(),.5);
- SetPOVShake(shakePos, shakeAngle, .05, 80.0);
-
- SetFireWait(player, 0.25);
- slash = 1;
- }
- else
- if (slash == 1)
- {
- // Allow another second for the 3rd attack.
- jkEnableSaber( player, 40, 0.15, 0.25 );
-
- povSlashAnimID = jkPlayPOVKey( player, povSnapAnim2, 2, 0x38 );
- slashAnimID = PlayKey(player, snapAnim2, 1, 0x38);
- PlaySoundThing(swingSound03, player, 1.0, -1, -1, 0x80);
-
- shakePos = VectorScale(RandVec(),.001);
- shakeAngle = VectorScale(RandVec(),.5);
- SetPOVShake(shakePos, shakeAngle, .05, 80.0);
-
- SetFireWait(player, 0.25);
- slash = 2;
- }
- else
- if (slash == 2)
- {
- jkEnableSaber( player, 60, 0.2, 0.25 );
-
- povSlashAnimID = jkPlayPOVKey( player, povSnapAnim3, 2, 0x38 );
- slashAnimID = PlayKey(player, snapAnim3, 1, 0x38);
- PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
-
- shakePos = VectorScale(RandVec(),.001);
- shakeAngle = VectorScale(RandVec(),.5);
- SetPOVShake(shakePos, shakeAngle, .05, 80.0);
-
- SetFireWait(player, 1.0);
- slash = 0;
- }
- }
- }
- // mode == 1
- else
- {
- // HEAVY slash.
- {
- jkEnableSaber( player, 160, 0.3, 1.2 );
- jkPlayPOVKey( player, povChargeAnim, 2, 0x38 );
- PlayKey(player, chargeAnim, 2, 0x38);
-
- shakePos = VectorScale(RandVec(),.001);
- shakeAngle = VectorScale(RandVec(),.5);
- SetPOVShake(shakePos, shakeAngle, .05, 80.0);
-
- PlaySoundThing(swingSoundDbl01, player, 1.0, -1, -1, 0x80);
- SetFireWait(player, 2.0);
- }
- }
- }
- return;
-
- # ........................................................................................
-
- newplayer:
- slash = 0;
- nextAttack = 0;
- slashAnimID=-1;
- povSlashAnimID=-1;
- // Disable autoblock
- ClearActorFlags(player, 0x2000);
- jkDisableSaber(player);
-
- // Back to POV, since the saber should never get autoselected at start for a multiplayer game.
- if ((jkGetSaberCam() == 1) && (GetCurrentCamera() == 1) && (GetPrimaryFocus(1) == player))
- CycleCamera();
-
- return;
-
- # ........................................................................................
-
- joined:
- SetTimerEx(1.0, 10, 0, 0);
- return;
-
- # ........................................................................................
-
- autoselect:
- // Return the saber when out of everthing except the fists
-
- // If the player has the weapon
- if(GetInv(player, GetWeaponBin(11)) != 0.0)
- {
- ReturnEx(200.0);
- }
- else
- {
- ReturnEx(-1.0);
- }
-
- Return;
-
- # ........................................................................................
-
- killed:
- if (GetLocalPlayerThing() == GetSenderRef())
- {
- if (GetCurWeapon(player) == 11)
- {
- PlaySoundThing(dismountSound, player, 1.0, -1, -1, 0x80);
-
- SetCurWeapon( player, GetWeaponBin(1) );
- }
- nosaber = 1;
- }
- Return;
-
-
- end
-
-